# bash completion for cfengine

have cfagent && {
_cfagent_options()
{
    COMPREPLY=( $( compgen -W '-a --sysadm -b --force-net-copy -c \
        --no-check-files -C --no-check-mounts -d --debug -D --define \
        -e --no-edits -E --enforce-links -f --file -h --help -H \
        --no-hard-classes -i --no-ifconfig -I --inform -k --no-copy \
        -K --no-lock -l --traverse-links -L --delete-stale-links -m \
        --no-mount -M --no-modules -n --recon --dry-run --just-print \
        -N --negate --undefine -p --parse-only -P --no-processes -q \
        --no-splay -s --no-commands -S --silent -t --no-tidy -u \
        --use-env -U --underscore-classes -v --verbose -V --version \
        -x --no-preconf -X --no-links -w --no-warn --quiet' -- "$cur" ) )
}

_cfagent()
{
    local cur prev

    COMPREPLY=()
    cur=`_get_cword`
    prev=${COMP_WORDS[COMP_CWORD-1]}

    case $prev in
        -@(f|-file))
            _filedir
            return 0
            ;;
    esac

    if [[ "$cur" == -* ]]; then
        _cfagent_options
    fi
}
complete -F _cfagent cfagent

_cfrun()
{
    local i section cfinputs

    COMPREPLY=()
    cur=`_get_cword`

    section=1
    for (( i=1; i < COMP_CWORD; i++ )); do
        if [[ "${COMP_WORDS[i]}" == -- ]]; then
            section=$((section + 1))
        fi
    done

    case $section in
        1)
            prev=${COMP_WORDS[COMP_CWORD-1]}
            case $prev in
                -f)
                    _filedir
                    return 0
                    ;;
            esac

            if [[ "$cur" == -* ]]; then
                COMPREPLY=( $( compgen -W '-f -h -d -S -T -v' -- $cur ) )
            else
                hostfile=${CFINPUTS:-/var/lib/cfengine/inputs}/cfrun.hosts
                for (( i=1; i < COMP_CWORD; i++ )); do
                    if [[ "${COMP_WORDS[i]}" == -f ]]; then
                        hostfile=${COMP_WORDS[i+1]}
                        break
                    fi
                done
                [ ! -f $hostfile ] && return 0

                COMPREPLY=( $(compgen -W  "$( grep -v \
                    -E '(=|^$|^#)' $hostfile )" -- "$cur" ) )
            fi
            ;;
        2)
            _cfagent_options
            ;;
    esac
}
complete -F _cfrun cfrun
}

# Local variables:
# mode: shell-script
# sh-basic-offset: 4
# sh-indent-comment: t
# indent-tabs-mode: nil
# End:
# ex: ts=4 sw=4 et filetype=sh
